Next:
Observer
, Previous:
Connection Between Observer & Observervable
, Up:
Index
Observable
Observable<Person>
Person의 변경을 모니터링 하려는 관찰자들을 private 리스트로 관리
관찰자가 Person의 변경 이벤트에 수신 등록 또는 해제(subscribe()/ unsubscribe())할 수 있다.
notify()를 통해 변경 이벤트가 발생했을 때, 모든 관찰자에게 정보가 전달되도록 한다.
template
<
typename
T
>
struct
Observable
{
void
notify
(
T
&
source
,
const
string
&
name
)
{
for
(
auto
obs
:
observers
)
obs
->
field_changed
(
source
,
name
)
;
}
void
subscribe
(
Observer
<
T
>*
f
)
{
observers
.
push_back
(
f
)
;
}
void
unsubscribe
(
Observer
<
T
>*
f
)
{
// ...
}
private
:
vector
<
Observer
<
T
>*>
observers
;
}
;
struct
Person
:
Observable
<
Person
>
{
void
set_age
(
const
int
age
)
{
if
(
this
->
age
==
age
)
return
;
//
변
경
되
지
않
았
을
때
,
처
리
this
->
age
=
age
;
notify
(
*
this
,
"
age
"
)
;
}
private
:
int
age
;
}
;